์น์ด์ ๋ธ๋ฆฌ์ ์์ธ ์ฒ๋ฆฌ, ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ, ๊ทธ๋ฆฌ๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต๊ณ ํจ์จ์ฑ์ ์ ์งํ๊ธฐ ์ํ ์ค๋ฅ ์ฒ๋ฆฌ ์ต์ ํ ์ ๋ต์ ์์๋ณด์ธ์.
์ฑ๋ฅ ์ง๋ขฐ๋ฐญ ํ์: ์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ ์ค๋ฒํค๋ ์ฌ์ธต ๋ถ์
์น์ด์ ๋ธ๋ฆฌ(Wasm)๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ์ฝ์ํ๊ณ , C++, Rust, C#๊ณผ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ๊ณ ์ฑ๋ฅ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ธ๋ผ์ฐ์ ๋ฐ ๊ทธ ์ด์์ผ๋ก ์ด์ํ ์ ์๊ฒ ํ๋ ํ์ ์ ์ธ ๊ธฐ์ ๋ก ๋ถ์ํ์ต๋๋ค. Wasm์ ์ค๊ณ ์ฒ ํ์ ์๋, ์์ ์ฑ, ์ด์์ฑ์ ์ฐ์ ์ํ๋ฉฐ, ๋ณต์กํ ๊ณ์ฐ๊ณผ ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์์ ์ ์ํ ์๋ก์ด ์งํ์ ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ๊ณผ ๋ฒ์๊ฐ ์ปค์ง์ ๋ฐ๋ผ, ๊ฒฌ๊ณ ํ ์ค๋ฅ ๊ด๋ฆฌ์ ํ์์ฑ์ด ๋ฌด์๋ณด๋ค ์ค์ํด์ก์ต๋๋ค. ํจ์จ์ ์ธ ์คํ์ด Wasm์ ํต์ฌ ์์น์ด์ง๋ง, ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ, ํนํ ์์ธ ์ฒ๋ฆฌ๋ ๋ฏธ๋ฌํ ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ์ ์ถ๊ฐํฉ๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋์์๋ ์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ(EH) ์ ์์ ์ดํด๋ณด๊ณ , ๊ทธ ์ฑ๋ฅ์ ์ํฅ์ ๋ถ์ํ๋ฉฐ, ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด Wasm ์ ํ๋ฆฌ์ผ์ด์ ์ด ํจ์จ์ ์ผ๋ก ์คํ๋๋๋ก ๋ณด์ฅํ๊ธฐ ์ํ ์ค๋ฅ ์ฒ๋ฆฌ ์ต์ ํ ์ ๋ต์ ์ค๋ช ํฉ๋๋ค.
์ค๋ฅ ์ฒ๋ฆฌ๋ ๋จ์ํ "์์ผ๋ฉด ์ข์ ๊ฒ"์ด ์๋๋ผ, ์ ๋ขฐํ ์ ์๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ๋ฐ ์์ด ๊ทผ๋ณธ์ ์ธ ์ธก๋ฉด์ ๋๋ค. ์ ์์ ์ธ ์ฑ๋ฅ ์ ํ(graceful degradation), ๋ฆฌ์์ค ์ ๋ฆฌ, ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ค๋ฅ ๋ก์ง์ ๋ถ๋ฆฌ๋ ๋ชจ๋ ํจ๊ณผ์ ์ธ ์ค๋ฅ ๊ด๋ฆฌ๋ฅผ ํตํด ๊ฐ๋ฅํด์ง๋๋ค. ์น์ด์ ๋ธ๋ฆฌ์ ์ด๊ธฐ ๋ฒ์ ์ ๋ฏธ๋๋ฉํ๊ณ ๊ณ ์ฑ๋ฅ์ธ ๊ฐ์ ๋จธ์ ์ ์ ๊ณตํ๋ ๋ฐ ์ง์คํ๊ธฐ ์ํด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ ์์ธ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ณต์กํ ๊ธฐ๋ฅ์ ์๋์ ์ผ๋ก ์๋ตํ์ต๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ด๊ธฐ์๋ ๋ฐํ์์ ๋จ์ํํ์ง๋ง, ์ค๋ฅ ๋ณด๊ณ ๋ฅผ ์ํด ์์ธ์ ํฌ๊ฒ ์์กดํ๋ ์ธ์ด๋ค์๊ฒ๋ ์๋นํ ์ฅ์ ๋ฌผ์ด์์ต๋๋ค. ๋ค์ดํฐ๋ธ EH์ ๋ถ์ฌ๋ ํด๋น ์ธ์ด์ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉ์ ๊ณต๊ฐ์์ ์คํ ํ๊ธฐ๋ฅผ ํตํด ์์ธ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ฑฐ๋ C ์คํ์ผ์ ์ค๋ฅ ์ฝ๋์ ์์กดํ๋ ๋ฑ ๋ ํจ์จ์ ์ด๊ณ ์ข ์ข ๋ง์ถคํ์ธ ํด๊ฒฐ์ฑ ์ ์์กดํด์ผ ํจ์ ์๋ฏธํ์ผ๋ฉฐ, ์ด๋ Wasm์ ์ํํ ํตํฉ ์ฝ์์ ์ ํดํ์ต๋๋ค.
์น์ด์ ๋ธ๋ฆฌ์ ํต์ฌ ์ฒ ํ๊ณผ EH์ ์งํ ์ดํดํ๊ธฐ
์น์ด์ ๋ธ๋ฆฌ๋ ์ฒ์๋ถํฐ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์๋๋ฐ์ค ํ๊ฒฝ์ ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ณ , ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ์์ธก ๊ฐ๋ฅํ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ต์ ๊ธฐ๋ฅ ์ ํ(MVP)์ ์ด๊ธฐ ์ด์ ์ ๋ง์ถ ๊ฒ์ ์ ๋ต์ ์ด์์ผ๋ฉฐ, ๋น ๋ฅธ ์ฑํ๊ณผ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ๋ณด์ฅํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ , ํนํ ๊ธฐ์กด ์ธ์ด์์ ์ปดํ์ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ํ์คํ๋๊ณ ํจ์จ์ ์ธ ์์ธ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๋ถ์ฌ๋ ์ง์ ์ ์์ด ์๋นํ ์ฅ๋ฒฝ์ด์์ต๋๋ค.
์๋ฅผ ๋ค์ด, C++ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ธฐ์น ์์ ์ค๋ฅ, ๋ฆฌ์์ค ํ๋ ์คํจ, ์์ฑ์ ์คํจ ๋ฑ์ ์์ธ๋ฅผ ์์ฃผ ์ฌ์ฉํฉ๋๋ค. Java์ C#์ ๊ตฌ์กฐ์ ์์ธ ์ฒ๋ฆฌ์ ๊น์ด ๋ฟ๋ฆฌ๋ด๋ฆฌ๊ณ ์์ผ๋ฉฐ, ๊ฑฐ์ ๋ชจ๋ I/O ์์ ์ด๋ ์ ํจํ์ง ์์ ์ํ๊ฐ ์์ธ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ Wasm EH ์๋ฃจ์ ์ด ์์ผ๋ฉด, ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ํ๋ ๊ฒ์ ์ข ์ข ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง์ ์ฌ์ค๊ณํด์ผ ํจ์ ์๋ฏธํ์ผ๋ฉฐ, ์ด๋ ์๊ฐ ์๋ชจ์ ์ด๊ณ ์๋ก์ด ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ๊ธฐ ์ฌ์ ์ต๋๋ค. ์ด ์ค์ํ ๊ฒฉ์ฐจ๋ฅผ ์ธ์ํ๊ณ ์น์ด์ ๋ธ๋ฆฌ ์ปค๋ฎค๋ํฐ๋ ์์ธ์ ์ธ ์ํฉ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฑ๋ฅ ์ข๊ณ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ์์ธ ์ฒ๋ฆฌ ์ ์ ๊ฐ๋ฐ์ ์ฐฉ์ํ์ต๋๋ค.
์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ ์ ์: ์์ธํ ์ดํด๋ณด๊ธฐ
์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ(EH) ์ ์์ `try-catch-delegate-throw` ๋ชจ๋ธ์ ๋์ ํฉ๋๋ค. ์ด ๋ชจ๋ธ์ Java, C++, JavaScript์ ๊ฐ์ ์ธ์ด์ ๋ง์ ๊ฐ๋ฐ์์๊ฒ ์น์ํฉ๋๋ค. ์ด ๋ชจ๋ธ์ ํตํด ์น์ด์ ๋ธ๋ฆฌ ๋ชจ๋์ ์์ธ๋ฅผ ๋์ง๊ณ (throw) ์ก์(catch) ์ ์์ผ๋ฉฐ, ์ ์์ ์ธ ์คํ ํ๋ฆ์์ ๋ฒ์ด๋๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ตฌ์กฐํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ํต์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
try๋ธ๋ก: ์์ธ๊ฐ ์กํ ์ ์๋ ์ฝ๋ ์์ญ์ ์ ์ํฉ๋๋ค. ์ด ๋ธ๋ก ๋ด์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐํ์์ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ๊ฒ์ํฉ๋๋ค.catch๋ช ๋ น์ด: ํน์ ์ ํ์ ์์ธ์ ๋ํ ํธ๋ค๋ฌ๋ฅผ ์ง์ ํฉ๋๋ค. ์น์ด์ ๋ธ๋ฆฌ๋ "ํ๊ทธ"๋ฅผ ์ฌ์ฉํ์ฌ ์์ธ ์ ํ์ ์๋ณํฉ๋๋ค.catch๋ช ๋ น์ด๋ ํน์ ํ๊ทธ์ ์ฐ๊ด๋์ด ํด๋น ํ๊ทธ์ ์ผ์นํ๋ ์์ธ๋ง ์ก์ ์ ์์ต๋๋ค.catch_all๋ช ๋ น์ด: ์์ธ ์ ํ์ ๊ด๊ณ์์ด ๋ชจ๋ ์์ธ๋ฅผ ์ก๋ ์ผ๋ฐ ํธ๋ค๋ฌ์ ๋๋ค. ์ด๋ ์ ๋ฆฌ ์์ ์ด๋ ์ ์ ์๋ ์ค๋ฅ ๋ก๊น ์ ์ ์ฉํฉ๋๋ค.throw๋ช ๋ น์ด: ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค. ํ๊ทธ์ ๊ด๋ จ ํ์ด๋ก๋ ๊ฐ(์: ์ค๋ฅ ์ฝ๋, ๋ฉ์์ง ํฌ์ธํฐ)์ ์ธ์๋ก ๋ฐ์ต๋๋ค.rethrow๋ช ๋ น์ด: ํ์ฌ ํ์ฑ ์์ธ๋ฅผ ๋ค์ ๋์ ธ, ํ์ฌ ํธ๋ค๋ฌ๊ฐ ์์ ํ ํด๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ํธ์ถ ์คํ์ ์์๋ก ์ ํ๋๋๋ก ํฉ๋๋ค.delegate๋ช ๋ น์ด: ์ด๊ฒ์try๋ธ๋ก์ด ์์ธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ง ์๊ณ ์ธ๋ถtry๋ธ๋ก์ ์ฒ๋ฆฌ๋ฅผ ์์ํ ์ ์๊ฒ ํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค. ๋ณธ์ง์ ์ผ๋ก "๋๋ ์ด๊ฒ์ ์ฒ๋ฆฌํ์ง ์์ ๊ฒ์ด๋, ์๋ก ๋๊ฒจ๋ผ"๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ ์์๋ ๋ธ๋ก ๋ด์์ ๋ถํ์ํ ์คํ ์ํ๋ฅผ ํผํ๋ฉด์ ํจ์จ์ ์ธ ์คํ ํ๊ธฐ ๊ธฐ๋ฐ์ EH์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
Wasm EH์ ํต์ฌ ์ค๊ณ ๋ชฉํ๋ "ํดํผ ํจ์ค(happy path)"์์ "์ ๋ก ๋น์ฉ(zero-cost)"์ด ๋๋ ๊ฒ์ ๋๋ค. ์ฆ, ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ๋๋ ์ ํ ์์ด์ผ ํ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ด๋ C++์์ ์ฌ์ฉ๋๋ ๋ฉ์ปค๋์ฆ๊ณผ ์ ์ฌํ๊ฒ, ์์ธ ์ฒ๋ฆฌ ์ ๋ณด(์: ์คํ ํ๊ธฐ ํ ์ด๋ธ)๋ฅผ ๋ชจ๋ ๋ช ๋ น์ด์์ ๋ฐํ์์ ํ์ธํ๋ ๋์ ๋ฉํ๋ฐ์ดํฐ์ ์ ์ฅํจ์ผ๋ก์จ ๋ฌ์ฑ๋ฉ๋๋ค. ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐํ์์ ์ด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ ํ๊ณ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ต๋๋ค.
์ ํต์ ์ธ ์์ธ ์ฒ๋ฆฌ: ๊ฐ๋ตํ ๋น๊ต ๊ฐ์
Wasm EH์ ์ค๊ณ ์ ํ๊ณผ ์ฑ๋ฅ ์ํฅ์ ์์ ํ ์ดํดํ๋ ค๋ฉด, ๋ค๋ฅธ ์ฃผ์ ์ธ์ด๋ค์ด ์์ธ๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์ง ์ดํด๋ณด๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค:
- C++ ์์ธ: ์ข ์ข "์ ๋ก ๋น์ฉ"์ผ๋ก ์ค๋ช ๋๋๋ฐ, "ํดํผ ํจ์ค"(์์ธ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ)์์๋ ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์ต์ํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋น์ฉ์ ์ฃผ๋ก ์์ธ๊ฐ ๋ฐ์ํ ๋ ์ง๋ถ๋๋ฉฐ, ์คํ ํ๊ธฐ์ ๋ฐํ์์ ์์ฑ๋ ํ๊ธฐ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ catch ๋ธ๋ก์ ๊ฒ์ํ๋ ๊ณผ์ ์ด ํฌํจ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ ์ฑ๋ฅ์ ์ฐ์ ์ํฉ๋๋ค.
-
Java/C# ์์ธ: ์ด๋ฌํ ๊ด๋ฆฌํ ์ธ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ง์ ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ํฌํจํ๋ฉฐ ๊ฐ์ ๋จธ์ ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ ๋ฐ ๋ฐํ์ ํ๊ฒฝ๊ณผ ๋ ๊น์ด ํตํฉ๋ฉ๋๋ค. ์ฌ์ ํ ์คํ ํ๊ธฐ์ ์์กดํ์ง๋ง, ์์ธ ์ธ์คํด์ค๋ฅผ ์ํ ๋ ๊ด๋ฒ์ํ ๊ฐ์ฒด ์์ฑ๊ณผ
finally๋ธ๋ก๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํ ์ถ๊ฐ ๋ฐํ์ ์ง์์ผ๋ก ์ธํด ์ค๋ฒํค๋๊ฐ ๋๋๋ก ๋ ๋์ ์ ์์ต๋๋ค. "์ ๋ก ๋น์ฉ" ๊ฐ๋ ์ ์ฌ๊ธฐ์๋ ๋ ์ ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ๋ฐ์ดํธ์ฝ๋ ๋ถ์ ๋ฐ ์ ์ฌ์ ์ธ ๊ฐ๋ ํ์ธ์ ์ํด ํดํผ ํจ์ค์์๋ ์ข ์ข ์์ ๊ธฐ๋ณธ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. -
JavaScript
try-catch: JavaScript์ ์ค๋ฅ ์ฒ๋ฆฌ๋ ๋งค์ฐ ๋์ ์ ๋๋ค.try-catch๋ธ๋ก์ ์ฌ์ฉํ์ง๋ง, ๋จ์ผ ์ค๋ ๋, ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ ํน์ฑ์ ๋น๋๊ธฐ ์ค๋ฅ ์ฒ๋ฆฌ(์: Promise ๋ฐasync/await์ฌ์ฉ) ๋ํ ์ค์ํฉ๋๋ค. ์ฑ๋ฅ ํน์ฑ์ JavaScript ์์ง์ ์ต์ ํ์ ํฌ๊ฒ ์ํฅ์ ๋ฐ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ๋๊ธฐ์ ์์ธ๋ฅผ ๋์ง๊ณ ์ก๋ ๊ฒ์ ์คํ ์ถ์ ์์ฑ ๋ฐ ๊ฐ์ฒด ์์ฑ์ผ๋ก ์ธํด ๋์ ๋๋ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. -
Rust์
Result/panic!: Rust๋ ์ ์์ ์ธ ํ๋ก๊ทธ๋จ ํ๋ฆ์ ์ผ๋ถ์ธ ๋ณต๊ตฌ ๊ฐ๋ฅํ ์ค๋ฅ์ ๋ํดResult<T, E>์ด๊ฑฐํ ์ฌ์ฉ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค. ์ด๋ ๋ช ์์ ์ด๋ฉฐ ๊ฑฐ์ ์ ๋ก ์ค๋ฒํค๋๋ฅผ ๊ฐ์ง๋๋ค. ์คํ์ ํธ๋ ์๋ฏธ์ ์์ธ๋ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ์ํด ์์ฝ๋์ด ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋กpanic!์ ์ํด ํธ๋ฆฌ๊ฑฐ๋์ด ํ๋ก๊ทธ๋จ ์ข ๋ฃ๋ ์ค๋ ๋ ํ๊ธฐ๋ก ์ด์ด์ง๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ผ๋ฐ์ ์ธ ์ค๋ฅ ์กฐ๊ฑด์ ๋ํด ๋น์ฉ์ด ๋ง์ด ๋๋ ํ๊ธฐ ์ฌ์ฉ์ ์ต์ํํฉ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ EH ์ ์์ ๊ท ํ์ ๋ง์ถ๋ ค๊ณ ์๋ํ๋ฉฐ, ์์ธ๊ฐ ์ค์ ๋ก ๋๋ฌผ๊ณ ์์ธ์ ์ธ ์ด๋ฒคํธ์ธ ๊ณ ์ฑ๋ฅ ์ฌ์ฉ ์ฌ๋ก์ ์ ๋ง๋ C++์ "ํดํผ ํจ์ค ์ ๋ก ๋น์ฉ" ๋ชจ๋ธ์ ๋ ๊ฐ๊น๊ฒ ๊ธฐ์๋๋ค.
์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ์ ์ฑ๋ฅ ์ํฅ: ์ค๋ฒํค๋ ๋ถ์
๋ชฉํ๋ ํดํผ ํจ์ค์์ "์ ๋ก ๋น์ฉ"์ด์ง๋ง, ์์ธ ์ฒ๋ฆฌ๋ ๊ฒฐ์ฝ ์ง์ ์ผ๋ก ๋ฌด๋ฃ๊ฐ ์๋๋๋ค. ๊ทธ ์กด์ฌ๋ง์ผ๋ก๋, ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋์ง ์์ ๋์กฐ์ฐจ ๋ค์ํ ํํ์ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํฉ๋๋ค. ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ Wasm ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
1. ์ฝ๋ ํฌ๊ธฐ ์ฆ๊ฐ
์์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ฑํํ์ ๋ ๊ฐ์ฅ ์ฆ๊ฐ์ ์ธ ์ํฅ ์ค ํ๋๋ ์ปดํ์ผ๋ ์น์ด์ ๋ธ๋ฆฌ ๋ฐ์ด๋๋ฆฌ์ ํฌ๊ธฐ ์ฆ๊ฐ์ ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋๋ฌธ์ ๋๋ค:
- ํ๊ธฐ ํ ์ด๋ธ(Unwind Tables): ์คํ ํ๊ธฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด, ์ปดํ์ผ๋ฌ๋ ๊ฐ ํจ์์ ์คํ ํ๋ ์ ๋ ์ด์์์ ์ค๋ช ํ๋ ๋ฉํ๋ฐ์ดํฐ(ํ๊ธฐ ํ ์ด๋ธ)๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ์ ๋ณด๋ ๋ฐํ์์ด ํธ๋ค๋ฌ๋ฅผ ๊ฒ์ํ๋ฉด์ ๋ฆฌ์์ค๋ฅผ ์ ํํ๊ฒ ์๋ณํ๊ณ ์ ๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค. ์ต์ ํ๋๋๋ผ๋ ์ด ํ ์ด๋ธ๋ค์ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
-
try์์ญ์ ์ํ ๋ฉํ๋ฐ์ดํฐ:try,catch,delegate๋ธ๋ก์ ๊ตฌ์กฐ๋ ์ด๋ฌํ ์์ญ๊ณผ ๊ทธ ๊ด๊ณ๋ฅผ ์ ์ํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด์ ๊ด๋ จ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํฉ๋๋ค. ์ค์ ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง์ด ์ต์ํ์ด๋๋ผ๋ ๊ตฌ์กฐ์ ์ค๋ฒํค๋๋ ์กด์ฌํฉ๋๋ค.
์ ์ธ๊ณ์ ์ํฅ: ์ธํฐ๋ท ์ธํ๋ผ๊ฐ ๋๋ฆฐ ์ง์ญ์ ์ฌ์ฉ์๋ ๋ฐ์ดํฐ ์๊ธ์ ์ ์ ํ์ด ์๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฌ์ฉ์์๊ฒ ๋ ํฐ Wasm ๋ฐ์ด๋๋ฆฌ๋ ๋ ๊ธด ๋ค์ด๋ก๋ ์๊ฐ๊ณผ ์ฆ๊ฐ๋ ๋ฐ์ดํฐ ์๋น๋ก ์ง๊ฒฐ๋ฉ๋๋ค. ์ด๋ ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ ๊ทผ์ฑ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ฝ๋ ํฌ๊ธฐ ์ต์ ํ๋ ํญ์ ์ค์ํ์ง๋ง, EH ์ค๋ฒํค๋๋ ์ด๋ฅผ ๋์ฑ ์ค์ํ๊ฒ ๋ง๋ญ๋๋ค.
2. ๋ฐํ์ ์ค๋ฒํค๋: ํ๊ธฐ(Unwinding)์ ๋น์ฉ
์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํ๋ก๊ทธ๋จ์ ํจ์จ์ ์ธ "ํดํผ ํจ์ค"์์ ๋ ๋น์ฉ์ด ๋ง์ด ๋๋ "์์ธ ๊ฒฝ๋ก"๋ก ์ ํ๋ฉ๋๋ค. ์ด ์ ํ์ ์ฌ๋ฌ ๋ฐํ์ ๋น์ฉ์ ๋ฐ์์ํต๋๋ค:
-
์คํ ํ๊ธฐ: ๊ฐ์ฅ ํฐ ๋น์ฉ์ ํธ์ถ ์คํ์ ํธ๋ ๊ณผ์ ์
๋๋ค. ๋ฐํ์์ ๊ฐ ์คํ ํ๋ ์์ ์ํํ๋ฉฐ, ํ๊ธฐ ํ
์ด๋ธ์ ์ฐธ์กฐํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ ํ ๋น ํด์ ํ ์ง(์: C++์์ ์๋ฉธ์ ํธ์ถ) ๊ฒฐ์ ํ๊ณ , ์ผ์นํ๋
catchํธ๋ค๋ฌ๋ฅผ ๊ฒ์ํด์ผ ํฉ๋๋ค. ์ด๋ ํนํ ๊น์ ํธ์ถ ์คํ์ ๊ฒฝ์ฐ ๊ณ์ฐ ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. - ์คํ ์ผ์ ์ค์ง ๋ฐ ๊ฒ์: ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ ์์ ์ธ ์คํ์ด ์ค๋จ๋ฉ๋๋ค. ๋ฐํ์์ ์ฆ๊ฐ์ ์ธ ์์ ์ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ ํ์ฑ ์คํ ํ๋ ์์ ํตํ ์ ์ฌ์ ์ผ๋ก ๊ธด ๊ฒ์์ ํฌํจํฉ๋๋ค. ์ด ๊ฒ์ ๊ณผ์ ์ CPU ์ฌ์ดํด์ ์๋นํ๊ณ ์ง์ฐ ์๊ฐ์ ์ ๋ฐํฉ๋๋ค.
- ๋ถ๊ธฐ ์์ธก ์คํจ: ํ๋ CPU๋ ๊ณ ์ฑ๋ฅ์ ์ ์งํ๊ธฐ ์ํด ๋ถ๊ธฐ ์์ธก์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์์ธ๋ ์ ์์ ๋๋ฌธ ์ด๋ฒคํธ์ ๋๋ค. ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์คํ ํ๋ฆ์์ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ถ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ ๊ฑฐ์ ํญ์ ๋ถ๊ธฐ ์์ธก ์คํจ๋ก ์ด์ด์ ธ CPU ํ์ดํ๋ผ์ธ์ด ํ๋ฌ์๋๊ณ ๋ค์ ๋ก๋๋์ด ์คํ์ ํฌ๊ฒ ์ง์ฐ์ํต๋๋ค. ํดํผ ํจ์ค๋ ์ด๋ฅผ ํผํ์ง๋ง, ์์ธ๊ฐ ๋ฐ์ํ ๋์ ๋น์ฉ์ ๋ถ๊ท ํ์ ์ผ๋ก ๋์ต๋๋ค.
- ๋์ ๋ ์ ์ ์ค๋ฒํค๋: Wasm EH ์ ์์ ํดํผ ํจ์ค์์ ์ต์ํ์ ์ ์ ์ค๋ฒํค๋(์ฆ, ์์ฑ๋๋ ์ฝ๋๋ ๊ฒ์ฌ๊ฐ ์ ์)๋ฅผ ๋ชฉํ๋ก ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋์ ์ค๋ฒํค๋, ์ฆ ์์ธ๊ฐ ๋ฐ์ํ ๋๋ง ๋ฐ์ํ๋ ๋น์ฉ์ ์๋นํ ์ ์์ต๋๋ค. ์ด ํธ๋ ์ด๋์คํ๋ ์ผ์ด ์ ํ๋ฆด ๋๋ EH์ ๋ํ ๋น์ฉ์ ๊ฑฐ์ ์ง๋ถํ์ง ์์ง๋ง, ์๋ชป๋ ๋๋ ๋ง์ ๋น์ฉ์ ์ง๋ถํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
3. JIT(Just-In-Time) ์ปดํ์ผ๋ฌ์์ ์ํธ์์ฉ
์น์ด์ ๋ธ๋ฆฌ ๋ชจ๋์ ์ข ์ข ๋ธ๋ผ์ฐ์ ๋ด์ JIT ์ปดํ์ผ๋ฌ๋ ๋ ๋ฆฝํ ๋ฐํ์์ ์ํด ๋ค์ดํฐ๋ธ ๊ธฐ๊ณ ์ฝ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค. JIT ์ปดํ์ผ๋ฌ๋ ์ผ๋ฐ์ ์ธ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ํ๋กํ์ผ๋งํ์ฌ ๊ด๋ฒ์ํ ์ต์ ํ๋ฅผ ์ํํฉ๋๋ค. ์์ธ ์ฒ๋ฆฌ๋ JIT์ ๋ณต์ก์ฑ์ ๋ํฉ๋๋ค:
-
์ต์ ํ ์ฅ๋ฒฝ:
try๋ธ๋ก์ ์กด์ฌ๋ ํน์ ์ปดํ์ผ๋ฌ ์ต์ ํ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,try๋ธ๋ก ๋ด์ ๋ช ๋ น์ด๋ ์์ธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์กํ๋ ์ง์ ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ฉด ์์ ๋กญ๊ฒ ์ฌ์ ๋ ฌ๋์ง ์์ ์ ์์ต๋๋ค. ์ด๋ ๋ ํจ์จ์ ์ธ ๋ค์ดํฐ๋ธ ์ฝ๋๊ฐ ์์ฑ๋๋ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. - ํ๊ธฐ ๋ฉํ๋ฐ์ดํฐ ์ ์ง: JIT ์ปดํ์ผ๋ฌ๋ ์ต์ ํ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๊ฐ Wasm ๋ฐํ์์ ์์ธ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ๊ณผ ์ฌ๋ฐ๋ฅด๊ฒ ์ธํฐํ์ด์คํ๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ JIT ์ปดํ์ผ๋ ์ฝ๋์ ๋ํ ํ๊ธฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ผผ๊ผผํ๊ฒ ์์ฑํ๊ณ ์ ์งํ๋ ๊ฒ์ด ํฌํจ๋๋ฉฐ, ์ด๋ ์ด๋ ค์ธ ์ ์๊ณ ํน์ ์ต์ ํ์ ๊ณต๊ฒฉ์ ์ธ ์ ์ฉ์ ์ ํํ ์ ์์ต๋๋ค.
- ์ถ์ธก์ ์ต์ ํ: JIT๋ ์ข ์ข ์ผ๋ฐ์ ์ธ ๊ฒฝ๋ก๊ฐ ์ ํ๋๋ค๊ณ ๊ฐ์ ํ๋ ์ถ์ธก์ ์ต์ ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ธ ๊ฒฝ๋ก๊ฐ ๊ฐ์๊ธฐ ํ์ฑํ๋๋ฉด ์ด๋ฌํ ์ถ์ธก์ด ๋ฌดํจํ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ์ญ์ต์ ํ(de-optimization) ๋ฐ ์ฝ๋ ์ฌ์ปดํ์ผ์ ํ์๋ก ํ์ฌ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํฉ๋๋ค.
4. ํดํผ ํจ์ค ๋ ์์ธ ๊ฒฝ๋ก ์ฑ๋ฅ
Wasm EH์ ํต์ฌ ์ฒ ํ์ C++๊ณผ ์ ์ฌํ๊ฒ "ํดํผ ํจ์ค"(์์ธ๊ฐ ๋ฐ์ํ์ง ์์)๋ฅผ ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ฝ๋๊ฐ ๊ฑฐ์ ์์ธ๋ฅผ ๋ฐ์์ํค์ง ์๋ ๊ฒฝ์ฐ, EH ๋ฉ์ปค๋์ฆ ์์ฒด์ ๋ฐํ์ ์ฑ๋ฅ ์ํฅ์ด ๋ฏธ๋ฏธํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ "๋ฏธ๋ฏธํ๋ค"๊ฐ "์ ๋ก"๋ ์๋๋ผ๋ ๊ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ๊ฐ ์ฝ๊ฐ ์ฆ๊ฐํ๊ณ , JIT๊ฐ EH๋ฅผ ์ธ์ํ๋ ์ฝ๋๋ฅผ ์ ์งํ๊ธฐ ์ํ ์ฌ์ํ๊ณ ์๋ฌต์ ์ธ ๋น์ฉ์ด ์ ์ฌ์ ์ผ๋ก ์กด์ฌํฉ๋๋ค. ์ค์ ์ฑ๋ฅ ํ๋ํฐ๋ ์์ธ๊ฐ ๋ฐ์ํ ๋ ๋ํ๋ฉ๋๋ค. ๊ทธ ์์ ์๋ ์คํ ํ๊ธฐ, ์์ธ ํ์ด๋ก๋๋ฅผ ์ํ ๊ฐ์ฒด ์์ฑ, ๊ทธ๋ฆฌ๊ณ ์์ ์ธ๊ธํ CPU ํ์ดํ๋ผ์ธ ์ค๋จ์ผ๋ก ์ธํด ๋น์ฉ์ด ์ ์ ์คํ ๊ฒฝ๋ก๋ณด๋ค ๋ช ๋ฐฐ๋ ๋ ๋์ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ด ํธ๋ ์ด๋์คํ๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค: ์์ธ์ ํธ๋ฆฌํจ๊ณผ ๊ฒฌ๊ณ ํจ ๋ ์ค๋ฅ ์๋๋ฆฌ์ค์์์ ์ ์ฌ์ ์ผ๋ก ๊ฐํ๋ฅธ ๋น์ฉ.
์น์ด์ ๋ธ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค๋ฅ ์ฒ๋ฆฌ ์ต์ ํ ์ ๋ต
์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ์ ๊ฐ์ํ ๋, ์น์ด์ ๋ธ๋ฆฌ์์ ์ค๋ฅ ์ฒ๋ฆฌ์ ๋ํ ๋ฏธ๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด ํ์์ ์ ๋๋ค. ๋ชฉํ๋ ์ง์ ์ผ๋ก ์์ธ์ ์ธ ์ํฉ์ ๋ํด Wasm EH๋ฅผ ํ์ฉํ๋ฉด์, ์์๋๋ ์ค๋ฅ์ ๋ํด์๋ ๋ ๊ฐ๋ฒผ์ด ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
1. ์์๋๋ ์ค๋ฅ์ ๋ํด ๋ฐํ ์ฝ๋ ๋ฐ Result ํ์
ํ์ฉ
์์๋๊ณ , ์ ์์ ์ธ ์ ์ด ํ๋ฆ์ ์ผ๋ถ์ด๊ฑฐ๋, ๋ก์ปฌ์์ ์ฒ๋ฆฌํ ์ ์๋ ์ค๋ฅ์ ๊ฒฝ์ฐ, ๋ช
์์ ์ธ ๋ฐํ ์ฝ๋๋ Result์ ์ ์ฌํ ํ์
(Rust์์ ์ผ๋ฐ์ ์ด๋ฉฐ, std::expected์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด C++์์๋ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข
์ข
๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ ์ ๋ต์
๋๋ค.
-
ํจ์์ ์ ๊ทผ ๋ฐฉ์: ์์ธ๋ฅผ ๋์ง๋ ๋์ , ํจ์๋ ์ฑ๊ณต๊ณผ ํ์ด๋ก๋๋ฅผ ๋ํ๋ด๋ ๊ฐ ๋๋ ์คํจ์ ์ค๋ฅ ์ฝ๋/๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฑ ํจ์๋
Result<ParsedData, ParseError>๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. - ์ฌ์ฉ ์์ : ํ์ผ I/O ์์ , ์ฌ์ฉ์ ์ ๋ ฅ ํ์ฑ, ๋คํธ์ํฌ ์์ฒญ ์คํจ(์: HTTP 404), ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ์ ์ด์์ ์ ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ง์ฃผ์น ๊ฒ์ผ๋ก ์์ํ๊ณ ์ ์์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์๋ ์กฐ๊ฑด๋ค์ ๋๋ค.
-
์ฅ์ :
- ์ ๋ก ๋ฐํ์ ์ค๋ฒํค๋: ์ฑ๊ณต ๊ฒฝ๋ก์ ์คํจ ๊ฒฝ๋ก ๋ชจ๋ ๊ฐ๋จํ ๊ฐ ํ์ธ์ ํฌํจํ๋ฉฐ ๋น์ฉ์ด ๋ง์ด ๋๋ ์คํ ํ๊ธฐ๊ฐ ์์ต๋๋ค.
- ๋ช ์์ ์ฒ๋ฆฌ: ๊ฐ๋ฐ์๊ฐ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ธ์งํ๊ณ ์ฒ๋ฆฌํ๋๋ก ๊ฐ์ ํ์ฌ ๋ ๊ฒฌ๊ณ ํ๊ณ ๊ฐ๋ ์ฑ ์๋ ์ฝ๋๋ฅผ ๋ง๋ญ๋๋ค.
- ์คํ ํ๊ธฐ ์์: Wasm EH์ ๊ด๋ จ๋ ๋ชจ๋ ๋น์ฉ(ํ์ดํ๋ผ์ธ ํ๋ฌ์, ํ๊ธฐ ํ ์ด๋ธ ์กฐํ)์ ํผํฉ๋๋ค.
2. ์ง์ ์ผ๋ก ์์ธ์ ์ธ ์ํฉ์ ๋ํด์๋ง ์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฌ์ฉ
"์ ์ด ํ๋ฆ์ ์์ธ๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ"๋ ์์น์ ์ค์ํ์ญ์์ค. Wasm ์์ธ๋ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ, ๋ ผ๋ฆฌ์ ๋ฒ๊ทธ ๋๋ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ธ ์คํ ๊ฒฝ๋ก๋ฅผ ํฉ๋ฆฌ์ ์ผ๋ก ๊ณ์ํ ์ ์๋ ์ํฉ์ ์ํด ์์ฝ๋์ด์ผ ํฉ๋๋ค.
- ์ฌ์ฉ ์์ : ์ฌ๊ฐํ ์์คํ ์ฅ์ , ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ, ํ๋ก๊ทธ๋จ ์ํ๋ฅผ ์์์ํฌ ์ ๋๋ก ์ฌ์ ์กฐ๊ฑด์ ์ฌ๊ฐํ๊ฒ ์๋ฐํ๋ ์ ํจํ์ง ์์ ํจ์ ์ธ์, ๋๋ ์ ๋ ๋ฐ์ํด์๋ ์ ๋๋ ๋ถ๋ณ์์ด ๊นจ์ง๋ ๊ณ์ฝ ์๋ฐ ๋ฑ์ ์๊ฐํ์ญ์์ค.
- ์์น: ์์ธ๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฌด์ธ๊ฐ ์๋ชป๋์์ผ๋ฉฐ ์์คํ ์ด ๋ณต๊ตฌํ๊ฑฐ๋(๊ฐ๋ฅํ ๊ฒฝ์ฐ) ์ ์์ ์ผ๋ก ์ข ๋ฃํ๊ธฐ ์ํด ์์ ์์ค์ ์ค๋ฅ ํธ๋ค๋ฌ๋ก ์ด๋ํด์ผ ํจ์ ์ ํธํฉ๋๋ค. ์ผ๋ฐ์ ์ด๊ณ ์์๋๋ ์ค๋ฅ์ ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋ฉ๋๋ค.
3. ์ค๋ฅ ์๋ ๊ฒฝ๋ก๋ฅผ ์ํ ์ค๊ณ (์ต์ ๋๋์ ์์น)
์ฌ์ ์๋ฐฉ์ ์ค๋ฅ ๋ฐฉ์ง๋ ํญ์ ์ฌํ ๋์์ ์ค๋ฅ ์ฒ๋ฆฌ๋ณด๋ค ํจ์จ์ ์ ๋๋ค. ์์ธ์ ์ธ ์ํ์ ๋ค์ด๊ฐ ๊ฐ๋ฅ์ฑ์ ์ต์ํํ๋๋ก ์ฝ๋๋ฅผ ์ค๊ณํ์ญ์์ค.
- ์ฌ์ ์กฐ๊ฑด ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ: ๋ชจ๋์ด๋ ์ค์ํ ํจ์์ ๊ฒฝ๊ณ์์ ์ ๋ ฅ๊ณผ ์ํ๋ฅผ ๊ฒ์ฆํ์ญ์์ค. ์์ธ๋ฅผ ๋์ง ์ ์๋ ๋ก์ง์ ์คํํ๊ธฐ ์ ์ ํธ์ถ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์๋์ง ํ์ธํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ํฌ์ธํฐ๋ฅผ ์ญ์ฐธ์กฐํ๊ฑฐ๋ ๋ฐฐ์ด์ ์ก์ธ์คํ๊ธฐ ์ ์ ํฌ์ธํฐ๊ฐ null์ด ์๋์ง ๋๋ ์ธ๋ฑ์ค๊ฐ ๋ฒ์ ๋ด์ ์๋์ง ํ์ธํ์ญ์์ค.
- ๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ: ๋ฌธ์ ๊ฐ ์๋ ๋ฐ์ดํฐ๋ ์ํ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ์์ธ๋ก ํ๋๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์์ ์ฅ์น์ ๊ฒ์ฌ๋ฅผ ๊ตฌํํ์ญ์์ค. ์ด๋ ์์ธ ๊ฒฝ๋ก์ ๋์ ๋น์ฉ์ ์ง๋ถํ *ํ๋ฅ *์ ์ต์ํํฉ๋๋ค.
4. ๊ตฌ์กฐํ๋ ์ค๋ฅ ํ์ ๋ฐ ์ฌ์ฉ์ ์ ์ ์์ธ ํ๊ทธ
Wasm EH๋ ๊ด๋ จ ํ์ด๋ก๋์ ํจ๊ป ์ฌ์ฉ์ ์ ์ ์์ธ "ํ๊ทธ"๋ฅผ ์ ์ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ๋ ์ ํํ๊ณ ํจ์จ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค.
-
ํ์
ํ๋ ์์ธ: ์ผ๋ฐ์ ์ธ
catch_all์ ์์กดํ๋ ๋์ , ๋ค๋ฅธ ์ค๋ฅ ์กฐ๊ฑด์ ๋ํด ํน์ ํ๊ทธ๋ฅผ ์ ์ํ์ญ์์ค(์: ๋คํธ์ํฌ ๋ฌธ์ ์ ๋ํ(tag $my_network_error (param i32)), ์ฝ๋์ ์์น๊ฐ ์๋ ํ์ฑ ์คํจ์ ๋ํ(tag $my_parsing_error (param i32 i32))). -
์ธ๋ถํ๋ ๋ณต๊ตฌ: ํ์
ํ๋ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด
catch๋ธ๋ก์ด ํน์ ์ค๋ฅ ํ์ ์ ๋์์ผ๋ก ํ ์ ์์ด ๋ ์ธ๋ถํ๋๊ณ ์ ์ ํ ๋ณต๊ตฌ ์ ๋ต์ผ๋ก ์ด์ด์ง๋๋ค. ์ด๋ ์ผ๋ฐ ์์ธ๋ฅผ ์ก์ ๋ค์ ๊ทธ ํ์ ์ ๋ค์ ํ๊ฐํ๋ ์ค๋ฒํค๋๋ฅผ ํผํฉ๋๋ค. - ๋ ๋ช ํํ ์๋ฏธ: ์ฌ์ฉ์ ์ ์ ํ๊ทธ๋ ์ค๋ฅ ๋ณด๊ณ ์ ๋ช ํ์ฑ์ ํฅ์์์ผ ๋ค๋ฅธ ๊ฐ๋ฐ์(๋ฐ ์๋ํ๋ ๋๊ตฌ)๊ฐ ์์ธ์ ๋ณธ์ง์ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ํฉ๋๋ค.
5. ์ฑ๋ฅ์ด ์ค์ํ ์น์ ๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ ํธ๋ ์ด๋์คํ
์น์ด์ ๋ธ๋ฆฌ ๋ชจ๋์์ ์ง์ ์ผ๋ก ์ฑ๋ฅ์ด ์ค์ํ ๋ถ๋ถ(์: ์์น ๊ณ์ฐ์ ๋ด๋ถ ๋ฃจํ, ์ค์๊ฐ ์ค๋์ค ์ฒ๋ฆฌ, ๊ทธ๋ํฝ ๋ ๋๋ง)์ ์๋ณํ์ญ์์ค. ์ด๋ฌํ ์น์ ์์๋ Wasm EH์ ์ต์ํ์ ํดํผ ํจ์ค ์ค๋ฒํค๋์กฐ์ฐจ ํ์ฉ๋์ง ์์ ์ ์์ต๋๋ค.
- ๊ฒฝ๋ ๋ฉ์ปค๋์ฆ ์ฐ์ ์์ ์ง์ : ์ด๋ฌํ ์น์ ์์๋ ๋ฐํ ์ฝ๋, ๋ช ์์ ์ค๋ฅ ์ํ ๋๋ ๊ธฐํ ๋น-์์ธ ๊ธฐ๋ฐ ์ค๋ฅ ์ ํธ ์ฒด๊ณ๋ฅผ ์ฒ ์ ํ ์ ํธํ์ญ์์ค.
-
์์ธ ๋ฒ์ ์ต์ํ: ์ฑ๋ฅ์ด ์ค์ํ ์์ญ์์ ์์ธ๊ฐ ๋ถ๊ฐํผํ ๊ฒฝ์ฐ,
try๋ธ๋ก์ ๋ฒ์๋ฅผ ๊ฐ๋ฅํ ํ ์ ํํ๊ณ ์์ธ๋ฅผ ์์ค์ ๊ฐ์ฅ ๊ฐ๊น๊ฒ ์ฒ๋ฆฌํ๋๋ก ๋ ธ๋ ฅํ์ญ์์ค. ์ด๋ ํ์ํ ์คํ ํ๊ธฐ ์๊ณผ ํธ๋ค๋ฌ ๊ฒ์ ๋ฒ์๋ฅผ ์ค์ ๋๋ค.
6. ์น๋ช
์ ์ธ ์ค๋ฅ๋ฅผ ์ํ unreachable ๋ช
๋ น์ด
์ค๋ฅ๊ฐ ๋๋ฌด ์ฌ๊ฐํ์ฌ ์คํ์ ๊ณ์ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ฑฐ๋, ์๋ฏธ ์๊ฑฐ๋, ์ํํ ์ํฉ์ ์ํด ์น์ด์
๋ธ๋ฆฌ๋ unreachable ๋ช
๋ น์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๋ช
๋ น์ด๋ ์ฆ์ Wasm ๋ชจ๋์ ํธ๋ฉ(trap)์์ผ ์คํ์ ์ข
๋ฃํฉ๋๋ค.
-
ํ๊ธฐ ์์, ํธ๋ค๋ฌ ์์: ์์ธ๋ฅผ ๋์ง๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ,
unreachable์ ์คํ ํ๊ธฐ๋ ํธ๋ค๋ฌ ๊ฒ์์ ํฌํจํ์ง ์์ต๋๋ค. ์ฆ๊ฐ์ ์ด๊ณ ํ์ ์ ์ธ ์ค๋จ์ ๋๋ค. - ํจ๋(Panics)์ ์ ํฉ: ์ด๋ Rust์ "ํจ๋"์ด๋ ์น๋ช ์ ์ธ ๋จ์ธ ์คํจ์ ๋๋ฑํฉ๋๋ค. ํ๋ก๊ทธ๋จ ์ํ๊ฐ ๋์ดํฌ ์ ์์ด ์์๋ ํ๋ก๊ทธ๋๋จธ ์ค๋ฅ๋ ์น๋ช ์ ์ธ ๋ฐํ์ ๋ฌธ์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
-
์ฃผ์ํด์ ์ฌ์ฉ: ๊ฐ์์ค๋ฌ์์ ์์ด์๋ ํจ์จ์ ์ด์ง๋ง,
unreachable์ ๋ชจ๋ ์ ๋ฆฌ ๋ฐ ์ ์์ ์ธ ์ข ๋ฃ ๋ก์ง์ ์ฐํํฉ๋๋ค. ๋ชจ๋์ ๋ํด ํฉ๋ฆฌ์ ์ธ ์งํ ๊ฒฝ๋ก๊ฐ ์์ ๋๋ง ์ฌ์ฉํ์ญ์์ค.
๊ธ๋ก๋ฒ ๊ด์ ๊ณผ ์ค์ ์ ์ํฅ
์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ์ ์ฑ๋ฅ ํน์ฑ์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ญ๊ณผ ์ง๋ฆฌ์ ์ง์ญ์ ๊ฑธ์ณ ๊ด๋ฒ์ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์น ์ ํ๋ฆฌ์ผ์ด์ (ํ๋ก ํธ์๋ ๋ก์ง): ๋ํํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์ฑ๋ฅ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ ์ธ๊ณ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์ ์ฅ์น๋ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ด๊ณ์์ด ์ ์๋ํด์ผ ํฉ๋๋ค. ์์ฃผ ๋ฐ์ํ๋ ์์ธ๋ก ์ธํ ์๊ธฐ์น ์์ ์๋ ์ ํ๋ ํนํ ๋ณต์กํ UI๋ ๋ฐ์ดํฐ ์ง์ฝ์ ์ธ ํด๋ผ์ด์ธํธ ์ธก ์ฒ๋ฆฌ์์ ๋ต๋ตํ ์ง์ฐ์ ์ด๋ํ ์ ์์ผ๋ฉฐ, ๊ณ ์ ๊ด์ฌ์ ๋ฅผ ์ฌ์ฉํ๋ ๋๋์ ์ค์ฌ์ง ์ฌ์ฉ์๋ถํฐ ์์ฑ ์ธํฐ๋ท์ ์์กดํ๋ ์ธ๋ด ์ง์ญ ์ฌ์ฉ์๊น์ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์๋ฒ๋ฆฌ์ค ํจ์ (WASI): ์น์ด์ ๋ธ๋ฆฌ ์์คํ ์ธํฐํ์ด์ค(WASI)๋ Wasm ๋ชจ๋์ด ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์ ํฌํจํ์ฌ ๋ธ๋ผ์ฐ์ ์ธ๋ถ์์ ์คํ๋ ์ ์๊ฒ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋น ๋ฅธ ์์ ์๊ฐ(์ฝ๋ ์คํํธ)๊ณผ ํจ์จ์ ์ธ ์คํ์ด ๋น์ฉ ํจ์จ์ฑ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. EH ๋ฉํ๋ฐ์ดํฐ๋ก ์ธํ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ ์ฆ๊ฐ๋ ์ด๊ธฐ ๋ก๋ฉ์ ๋ฆ์ถ ์ ์์ผ๋ฉฐ, ์์ธ๋ก ์ธํ ๋ฐํ์ ์ค๋ฒํค๋๋ ๋ ๋์ ์ปดํจํ ๋น์ฉ์ผ๋ก ์ด์ด์ ธ ์คํ ์๊ฐ์ ๋ํด ๋น์ฉ์ ์ง๋ถํ๋ ์ ์ธ๊ณ ์ ๊ณต์ ์ฒด์ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ฃ์ง ์ปดํจํ : ๋ฆฌ์์ค๊ฐ ์ ํ๋ ์ฃ์ง ํ๊ฒฝ์์๋ ์ฝ๋์ ๋ชจ๋ ๋ฐ์ดํธ์ ๋ชจ๋ CPU ์ฌ์ดํด์ด ์ค์ํฉ๋๋ค. Wasm์ ์์ ์ค์น ๊ณต๊ฐ๊ณผ ๊ณ ์ฑ๋ฅ์ IoT ์ฅ์น, ์ค๋งํธ ํฉํ ๋ฆฌ ๋๋ ์ง์ญํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋งค๋ ฅ์ ์ ๋๋ค. ์ฌ๊ธฐ์ EH ์ค๋ฒํค๋ ๊ด๋ฆฌ๋ ๋์ฑ ์ค์ํด์ง๋๋ค. ํฐ ๋ฐ์ด๋๋ฆฌ๋ ๋น๋ฒํ ์์ธ๋ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ์๋ํ์ฌ ์ฅ์น ๊ณ ์ฅ์ด๋ ์ค์๊ฐ ๋ง๊ฐ ์๊ฐ ๋ฏธ์ค์๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ๊ฒ์ ๋ฐ ๊ณ ์ฑ๋ฅ ์ปดํจํ : ๊ฒ์, ๊ณผํ ์๋ฎฌ๋ ์ด์ , ๊ธ์ต ๋ชจ๋ธ๋ง๊ณผ ๊ฐ์ด ์ค์๊ฐ ์๋ต์ฑ๊ณผ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์๊ตฌํ๋ ์ฐ์ ์ ์์ธก ๋ถ๊ฐ๋ฅํ ์ฑ๋ฅ ์คํ์ดํฌ๋ฅผ ์ฉ๋ฉํ ์ ์์ต๋๋ค. ์์ธ ํ๊ธฐ๋ก ์ธํ ์ฌ์ํ ์ง์ฐ์กฐ์ฐจ๋ ๊ฒ์ ๋ฌผ๋ฆฌ ์์ง์ ๋ฐฉํดํ๊ณ , ์ง์ฐ์ ์ ๋ฐํ๊ฑฐ๋, ์๊ฐ์ด ์ค์ํ ๊ณ์ฐ์ ๋ฌดํจํํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์ ๋ฐ ์ฐ๊ตฌ์์๊ฒ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ง์ญ๋ณ ๊ฐ๋ฐ์ ๊ฒฝํ: Wasm EH๋ฅผ ๋๋ฌ์ผ ํด๋ง, ์ปดํ์ผ๋ฌ ์ง์, ์ปค๋ฎค๋ํฐ ์ง์์ ์ฑ์๋๋ ๋ค์ํฉ๋๋ค. ์ ๊ทผ์ฑ ๋๊ณ ๊ณ ํ์ง์ ๋ฌธ์, ๊ตญ์ ํ๋ ์์ , ๊ฒฌ๊ณ ํ ๋๋ฒ๊น ๋๊ตฌ๋ ๋ค์ํ ์ธ์ด ๋ฐ ๋ฌธํ์ ๋ฐฐ๊ฒฝ์ ๊ฐ๋ฐ์๋ค์ด ์ง์ญ์ ์ฑ๋ฅ ๊ฒฉ์ฐจ ์์ด ํจ์จ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์๋๋ก ์ง์ํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
ํฅํ ์ ๋ง ๋ฐ ์งํ ์ค์ธ ๊ฐ๋ฐ
์น์ด์ ๋ธ๋ฆฌ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๋ ํ์ค์ด๋ฉฐ, ์์ธ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ณ์ํด์ ๊ฐ์ ๋๊ณ ๋ค๋ฅธ ์ ์๋ค๊ณผ ํตํฉ๋ ๊ฒ์ ๋๋ค:
- WasmGC ํตํฉ: ์น์ด์ ๋ธ๋ฆฌ ๊ฐ๋น์ง ์ปฌ๋ ์ (WasmGC) ์ ์์ Java, C#, Kotlin, Dart์ ๊ฐ์ ๊ด๋ฆฌํ ์ธ์ด๋ฅผ Wasm์ ๋ ํจ์จ์ ์ผ๋ก ์ง์ ๊ฐ์ ธ์ฌ ์์ ์ ๋๋ค. ์ด๋ ์์ธ๊ฐ ํํ๋๊ณ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ์ํฅ์ ๋ฏธ์น ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฉฐ, ์ด๋ฌํ ์ธ์ด์ ๋ํด ๋์ฑ ์ต์ ํ๋ EH๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- Wasm ์ค๋ ๋: ์น์ด์ ๋ธ๋ฆฌ๊ฐ ๋ค์ดํฐ๋ธ ์ค๋ ๋ฉ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ฒ ๋จ์ ๋ฐ๋ผ, ์ค๋ ๋ ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ์์ธ ์ฒ๋ฆฌ์ ๋ณต์ก์ฑ์ ํด๊ฒฐํด์ผ ํ ๊ฒ์ ๋๋ค. ๋์์ฑ ์ค๋ฅ ์๋๋ฆฌ์ค์์ ์ผ๊ด๋๊ณ ํจ์จ์ ์ธ ๋์์ ๋ณด์ฅํ๋ ๊ฒ์ด ํต์ฌ ๊ฐ๋ฐ ์์ญ์ด ๋ ๊ฒ์ ๋๋ค.
- ํฅ์๋ ํด๋ง: Wasm EH ์ ์์ด ์์ ํ๋จ์ ๋ฐ๋ผ ์ปดํ์ผ๋ฌ(LLVM, Emscripten, Wasmtime), ๋๋ฒ๊ฑฐ, ํ๋กํ์ผ๋ฌ์์ ์๋นํ ๋ฐ์ ์ด ์์๋ฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ค์ EH ์ค๋ฒํค๋์ ๋ํ ๋ ๋์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ฐพ์๋ด๊ณ ์ํํ๋ ๋ฐ ๋์์ ์ค ๊ฒ์ ๋๋ค.
- ๋ฐํ์ ์ต์ ํ: ๋ธ๋ผ์ฐ์ (์: V8, SpiderMonkey, JavaScriptCore) ๋ฐ ๋ ๋ฆฝํ ํ๊ฒฝ(์: Wasmtime, Wasmer)์ ์น์ด์ ๋ธ๋ฆฌ ๋ฐํ์์ ๊ณ ๊ธ JIT ์ปดํ์ผ ๊ธฐ์ ๊ณผ ๊ฐ์ ๋ ํ๊ธฐ ๋ฉ์ปค๋์ฆ์ ํตํด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ EH ๊ตฌํ์ ์ง์์ ์ผ๋ก ์ต์ ํํ์ฌ ๋น์ฉ์ ์ค์ผ ๊ฒ์ ๋๋ค.
- ํ์คํ ์งํ: EH ์ ์ ์์ฒด๋ ์ค์ ์ฌ์ฉ ์ฌ๋ก์ ํผ๋๋ฐฑ์ ๋ฐํ์ผ๋ก ์ถ๊ฐ์ ์ธ ๊ฐ์ ์ ๋์์ด ๋ฉ๋๋ค. ์ปค๋ฎค๋ํฐ์ ์ง์์ ์ธ ๋ ธ๋ ฅ์ Wasm์ ํต์ฌ ์์น์ ์ ์งํ๋ฉด์ EH๋ฅผ ๊ฐ๋ฅํ ํ ์ฑ๋ฅ์ด ์ข๊ณ ์ธ์ฒด๊ณตํ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ
์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ์ ์ฑ๋ฅ ์ํฅ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ต์ ํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ๊ณ ๋ คํ์ญ์์ค:
- ์ค๋ฅ ํ๊ฒฝ ์ดํดํ๊ธฐ: ์ค๋ฅ๋ฅผ "์์/๋ณต๊ตฌ ๊ฐ๋ฅ"๊ณผ "์์ธ์ /๋ณต๊ตฌ ๋ถ๊ฐ๋ฅ"์ผ๋ก ๋ถ๋ฅํ์ญ์์ค. ์ด ๊ธฐ์ด์ ์ธ ๋จ๊ณ๋ ์ด๋ค ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ด ์ ์ ํ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
-
Resultํ์ /๋ฐํ ์ฝ๋ ์ฐ์ ์์ ์ง์ : ์์๋๋ ์ค๋ฅ์ ๋ํด์๋ ์ผ๊ด๋๊ฒ ๋ช ์์ ์ธ ๋ฐํ ๊ฐ(Rust์Result์ด๊ฑฐํ ๋๋ ์ค๋ฅ ์ฝ๋์ ๊ฐ์)์ ์ฌ์ฉํ์ญ์์ค. ์ด๊ฒ๋ค์ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์ค๋ฅ ์ ํธ๋ฅผ ์ํ ์ฃผ์ ๋๊ตฌ์ ๋๋ค. -
Wasm EH๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํ๊ธฐ: ๋ค์ดํฐ๋ธ ์น์ด์
๋ธ๋ฆฌ
try-catch-throw๋ ํ๋ก๊ทธ๋จ ํ๋ฆ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๊ณ์๋ ์ ์๊ฑฐ๋ ์ฌ๊ฐํ๊ณ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์์คํ ๊ฒฐํจ์ด ์๋ ์ง์ ์ผ๋ก ์์ธ์ ์ธ ์กฐ๊ฑด์ ๋ํด์๋ง ์ฌ์ฉํ์ญ์์ค. ์ด๋ฅผ ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ ํ๋ฅผ ์ํ ์ตํ์ ์๋จ์ผ๋ก ์ทจ๊ธํ์ญ์์ค. - ์ฝ๋๋ฅผ ์๊ฒฉํ๊ฒ ํ๋กํ์ผ๋งํ๊ธฐ: ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ์ด๋์ ์๋์ง ๊ฐ์ ํ์ง ๋ง์ญ์์ค. ์ต์ ๋ธ๋ผ์ฐ์ ์ Wasm ๋ฐํ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ๊ฒฝ๋ก์์ ์ค์ EH ์ค๋ฒํค๋๋ฅผ ์๋ณํ์ญ์์ค. ์ด ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์ค๋ฅ ๊ฒฝ๋ก๋ฅผ ์ฒ ์ ํ ํ ์คํธํ๊ธฐ: ๋ฐํ ์ฝ๋ ๊ธฐ๋ฐ์ด๋ ์์ธ ๊ธฐ๋ฐ์ด๋ , ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง์ด ๊ธฐ๋ฅ์ ์ผ๋ก ์ ํํ ๋ฟ๋ง ์๋๋ผ ๋ถํ ์ํ์์๋ ์์ฉ ๊ฐ๋ฅํ ์ฑ๋ฅ์ ๋ณด์ด๋์ง ํ์ธํ์ญ์์ค. ์ฃ์ง ์ผ์ด์ค์ ๋์ ์ค๋ฅ์จ์ ํ ์คํธํ์ฌ ์ค์ ์ํฅ์ ์ดํดํ์ญ์์ค.
- Wasm ํ์ค ์ต์ ์ ๋ณด ์ ์งํ๊ธฐ: ์น์ด์ ๋ธ๋ฆฌ๋ ์ด์์๋ ํ์ค์ ๋๋ค. ์๋ก์ด ์ ์, ๋ฐํ์ ์ต์ ํ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ํ์ธํ์ญ์์ค. Wasm ์ปค๋ฎค๋ํฐ์ ๊ต๋ฅํ๋ฉด ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์ต๋๋ค.
- ํ ๊ต์กํ๊ธฐ: ๊ฐ๋ฐ ํ ์ ์ฒด์ ๊ฑธ์ณ ์ค๋ฅ ์ฒ๋ฆฌ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ผ๊ด๋ ์ดํด์ ์ ์ฉ์ ์ด์งํ์ญ์์ค. ํต์ผ๋ ์ ๊ทผ ๋ฐฉ์์ ํํธํ๋๊ณ ๋นํจ์จ์ ์ธ ์ค๋ฅ ๊ด๋ฆฌ ์ ๋ต์ ๋ฐฉ์งํฉ๋๋ค.
๊ฒฐ๋ก
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ๊ณ ์ฑ๋ฅ, ์ด์ ๊ฐ๋ฅํ ์ฝ๋์ ๋ํ ์น์ด์ ๋ธ๋ฆฌ์ ์ฝ์์ ๋ถ์ธํ ์ ์์ต๋๋ค. ํ์คํ๋ ์์ธ ์ฒ๋ฆฌ์ ๋์ ์ Wasm์ ๋ ๊ด๋ฒ์ํ ์ธ์ด์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ ์คํ ๊ฐ๋ฅํ ๋์์ผ๋ก ๋ง๋๋ ์ค์ํ ๋จ๊ณ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ํนํ ์ค๋ฅ ์ฒ๋ฆฌ ์ค๋ฒํค๋ ํํ์ ์ฑ๋ฅ ํธ๋ ์ด๋์คํ๊ฐ ๋ฐ๋ฆ ๋๋ค.
Wasm์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๋ ์ด์ ๋ ์ค๋ฅ ๊ด๋ฆฌ์ ๋ํ ๊ท ํ ์กํ๊ณ ์ฌ๋ ค ๊น์ ์ ๊ทผ ๋ฐฉ์์ ์์ต๋๋ค. ์์๋๋ ์ค๋ฅ์ ๋ํด ๋ฐํ ์ฝ๋์ ๊ฐ์ ๊ฒฝ๋ ๋ฉ์ปค๋์ฆ์ ํ์ฉํ๊ณ , ์ง์ ์ผ๋ก ์์ธ์ ์ธ ์ํฉ์ ๋ํด ์น์ด์ ๋ธ๋ฆฌ์ ๋ค์ดํฐ๋ธ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ ์คํ๊ฒ ์ ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๊ฒฌ๊ณ ํ๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ์ธ๊ณ์ ์ผ๋ก ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์น์ด์ ๋ธ๋ฆฌ ์ํ๊ณ๊ฐ ๊ณ์ ์ฑ์ํจ์ ๋ฐ๋ผ, ์ด๋ฌํ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ ์ต์ ํํ๋ ๊ฒ์ด ์ ์ธ๊ณ์ ์ผ๋ก ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋๋ค.